package config

import (
	"time"
)

// Config 应用程序配置结构
type Config struct {
	App      AppConfig      `json:"app"`
	Logger   LoggerConfig   `json:"logger"`
	Progress ProgressConfig `json:"progress"`
	Pool     PoolConfig     `json:"pool"`
	System   SystemConfig   `json:"system"`
	Logs     LogsConfig     `json:"logs"`
	Commands CommandsConfig `json:"commands"`
	Output   OutputConfig   `json:"output"`
}

// AppConfig 应用基础配置
type AppConfig struct {
	Name    string `json:"name"`
	Version string `json:"version"`
	Debug   bool   `json:"debug"`
}

// LoggerConfig 日志配置
type LoggerConfig struct {
	Level  string `json:"level"`
	Format string `json:"format"`
	Output string `json:"output"`
	File   string `json:"file"`
}

// ProgressConfig 进度条配置
type ProgressConfig struct {
	Enabled        bool   `json:"enabled"`
	Style          string `json:"style"`
	Width          int    `json:"width"`
	ShowPercentage bool   `json:"show_percentage"`
	ShowCount      bool   `json:"show_count"`
}

// PoolConfig 协程池配置
type PoolConfig struct {
	Size             int  `json:"size"`
	NonBlocking      bool `json:"nonblocking"`
	MaxBlockingTasks int  `json:"max_blocking_tasks"`
}

// SystemConfig 系统信息收集配置
type SystemConfig struct {
	Enabled bool     `json:"enabled"`
	Modules []string `json:"modules"`
}

// LogSource 日志源配置
type LogSource struct {
	Name    string   `json:"name"`
	Path    string   `json:"path"`
	Lines   int      `json:"lines"`
	Filters []string `json:"filters"`
}

// LogsConfig 日志收集配置
type LogsConfig struct {
	Enabled bool        `json:"enabled"`
	Sources []LogSource `json:"sources"`
}

// CommandTask 命令任务配置
type CommandTask struct {
	Name    string        `json:"name"`
	Command string        `json:"command"`
	Timeout time.Duration `json:"timeout"`
}

// CommandsConfig 命令执行配置
type CommandsConfig struct {
	Enabled bool          `json:"enabled"`
	Timeout time.Duration `json:"timeout"`
	Tasks   []CommandTask `json:"tasks"`
}

// OutputConfig 输出配置
type OutputConfig struct {
	Format   string `json:"format"`
	File     string `json:"file"`
	Dir      string `json:"dir"`
	Compress bool   `json:"compress"`
}
